package cgl.iotcloud.examples.chat; import cgl.iotcloud.core.*; import cgl.iotcloud.core.client.SensorClient; import cgl.iotcloud.core.msg.MessageContext; import cgl.iotcloud.core.sensorsite.SensorDeployDescriptor; import cgl.iotcloud.core.sensorsite.SiteContext; import cgl.iotcloud.core.transport.Channel; import cgl.iotcloud.core.transport.Direction; import org.apache.thrift.transport.TTransportException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class RabbitMQSensor extends AbstractSensor { private static Logger LOG = LoggerFactory.getLogger(RabbitMQSensor.class); private boolean run = true; @Override public Configurator getConfigurator(Map conf) { return new RabbitConfigurator(); } @Override public void open(SensorContext context) { final Channel sendChannel = context.getChannel("rabbitmq", "sender"); final Channel receiveChannel = context.getChannel("rabbitmq", "receiver"); Thread t = new Thread(new Runnable() { @Override public void run() { while (run) { sendChannel.publish("Hello".getBytes()); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }); t.start(); startListen(receiveChannel, new MessageReceiver() { @Override public void onMessage(Object message) { if (message instanceof MessageContext) { System.out.println(new String(((MessageContext) message).getBody())); } else { System.out.println("Unexpected message"); } } }); LOG.info("Starting the sensor..."); } @SuppressWarnings("unchecked") private class RabbitConfigurator extends AbstractConfigurator { @Override public SensorContext configure(SiteContext siteContext, Map conf) { SensorContext context = new SensorContext("rabbitMQSensor"); Map sendProps = new HashMap(); sendProps.put("exchange", "test"); sendProps.put("routingKey", "test"); sendProps.put("queueName", "test"); Channel sendChannel = createChannel("sender", sendProps, Direction.OUT, 1024); sendChannel.setGrouped(true); Map receiveProps = new HashMap(); receiveProps.put("queueName", "test"); Channel receiveChannel = createChannel("receiver", receiveProps, Direction.IN, 1024); receiveChannel.setGrouped(true); context.addChannel("rabbitmq", sendChannel); context.addChannel("rabbitmq", receiveChannel); return context; } } @Override public void close() { run = false; } public static void main(String[] args) throws TTransportException { // read the configuration file Map conf = Utils.readConfig(); SensorClient client; client = new SensorClient(conf); List<String> sites = new ArrayList<String>(); sites.add("local"); SensorDeployDescriptor deployDescriptor = new SensorDeployDescriptor("iotcloud-examples-1.0-SNAPSHOT.jar", "cgl.iotcloud.examples.chat.RabbitMQSensor"); deployDescriptor.addDeploySites(sites); client.deploySensor(deployDescriptor); } }